#ifndef SUBJECT_H_
#define SUBJECT_H_

#include <list>

class Observer;

/*
 * Subject is used to organize and call the Observer. 
 */
class Subject
{
public:
	virtual ~Subject(void);

protected:
	Subject(void);

public:
	void attach(Observer*);
	void detach(Observer*);
	void update();

private:
	std::list<Observer*> m_observerList;
};

#endif // SUBJECT_H_
